﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

// Mô tả  : Lớp xử lý giỏ hàng - Shopping. Gom 2 classes: CartItem va ShoppingCart
//          Có thể sử dụng ở bất cứ trang nào bằng cách sử dụng tham chiếu ở đầu dòng
//          <%@ Import Namespace = "WebNXBKD12.App_Code" %>
// Tác giả  : Ông Xuân Hồng 
// Ngày cập nhật : 24/10/2011 

namespace WebNXBKD12.App_Code
{
    // Mô tả: class CartItem - chứa các thông tin của 1 cuốn sách
    [Serializable]
    public class CartItem
    {
        private int _productID;
        private string _productName;
        private string _productImageUrl;
        private int _quantity;
        private double _price;
        private double _lineTotal;
        public void New()
        {
        }
        public void New(int ProductID, string ProductName,
                        string ProductImageUrl, int Quantity,
                        double Price)
        {
            _productID = ProductID;
            _productName = ProductName;
            _productImageUrl = ProductImageUrl;
            _quantity = Quantity;
            _price = Price;
            _lineTotal = Quantity * Price;
        }
        public int ProductID
        {
            get
            {
                return _productID;
            }
            set
            {
                _productID = value;
            }
        }
        public string ProductName
        {
            get
            {
                return _productName;
            }
            set
            {
                _productName = value;
            }
        }
        public string ProductImageUrl
        {
            get
            {
                return _productImageUrl;
            }
            set
            {
                _productImageUrl = value;
            }
        }
        public int Quantity 
        {
        get
            {
                return _quantity;
            }
            set
            {
                _quantity = value;
            }
        }
        public double Price
        {
            get
            {
                return _price;
            }
            set
            {
                _price = value;
            }
        }
        public double LineTotal
        {
            get
            {
                return _quantity * _price;
            }
        }
    }


    // Mô tả: class ShoppingCart - Cập nhật thông tin giỏ hàng
    [Serializable]
    public class ShoppingCart
    {
        // để biết được thời gian tạo giỏ hàng 
        // và thời gian giỏ hàng được cập nhật ta sử dụng 2 biến _dateCreated và _lastUpdate
        private DateTime _dateCreated;
        private DateTime _lastUpdate;
        private List<CartItem> _items;
        public ShoppingCart()
        {
            if (this._items == null)
            {
                this._items = new List<CartItem>();
                this._dateCreated = DateTime.Now;
            }
        }
        public List<CartItem> Items
        {
            get
            {
                return _items;
            }
            set
            {
                _items = value;
            }
        }
        public void Insert(int ProductID, double Price,
                            int Quantity, string ProductName,
                            string ProductImageUrl)
        {
            int ItemIndex = ItemIndexOfID(ProductID);
            if (ItemIndex == -1)
            {
                CartItem NewItem = new CartItem();
                NewItem.ProductID = ProductID;
                NewItem.Quantity = Quantity;
                NewItem.Price = Price;
                NewItem.ProductName = ProductName;
                NewItem.ProductImageUrl = ProductImageUrl;
                _items.Add(NewItem);
            }
            else
            {
                _items[ItemIndex].Quantity += 1;
            }
            _lastUpdate = DateTime.Now;
        }
        public void Update(int RowID, int ProductID, int Quantity, double Price)
        {
            CartItem Item = _items[RowID];
            Item.ProductID = ProductID;
            Item.Quantity = Quantity;
            Item.Price = Price;
            _lastUpdate = DateTime.Now;
        }
        public void DeleteItem(int rowID)
        {
            _items.RemoveAt(rowID);
            _lastUpdate = DateTime.Now;
        } 
        private int ItemIndexOfID(int ProductID  )
        {
            int index=0; 
            foreach (CartItem item in _items)
            {
                if (item.ProductID == ProductID)
                {
                    return index;
                }
                index += 1;
            }
            return -1;
        }
        public double Total 
        {
            get
            {
                double t = 0;
                if (_items == null)
                {
                    return 0;
                }
                foreach (CartItem Item in _items)
                {
                    t += Item.LineTotal;
                }
                return t;
            }
        }
    }
}